<?php
class Jnd_Form_Decorator_FormulaireLabelSimple extends Zend_Form_Decorator_Abstract
{

    public function buildLabel()
    {
        $element = $this->getElement();
        if (! ($element instanceof Zend_Form_Element_Submit || $element instanceof Zend_Form_Element_Hash)) {
            if (! $element->noLabel) {
                $label = $element->getLabel();
                if ($translator = $element->getTranslator()) {
                    $label = $translator->translate($label);
                }
                return $element->getView()->formLabel($element->getName(), $label, array(
                    "class" => "styleJnd"
                )) . $this->buildRequired() . " : ";
            }
        }
        return '';
    }

    public function buildInput()
    {
        $element = $this->getElement();
        $helper = $element->helper;
        return $element->getView()->$helper($element->getName(), $element->getValue(), $element->getAttribs(), $element->options, '');
    }

    public function buildErrors()
    {
        $element = $this->getElement();
        $messages = $element->getMessages();
        if (empty($messages)) {
            return '';
        }
        return '<span class="errors">' . $element->getView()->formErrors($messages) . '</span>';
    }

    public function buildDescription()
    {
        $element = $this->getElement();
        $desc = $element->getDescription();
        if (empty($desc)) {
            return '';
        }
        $jquery = Jnd_App::getConfig('jquery');
        $jqueryServeurUrl = $jquery['path']['min'];
        $element->getView()->jQuery()->addOnLoad("
      $('#tooltip" . $element->getName() . "').tooltip({
            track: true,
            delay: 0,
            showURL: false,
            fade: 250,
            cssClass: 'tooltip-ddb'
        });
    ")->addJavascriptFile($jqueryServeurUrl . 'plugins/tooltip/jquery.tooltip.js')->addStylesheet($jqueryServeurUrl . 'plugins/tooltip/jquery.tooltip.css');
        return '<img src="/images/help.png" id="tooltip' . $element->getName() . '" alt="" border="" class="tooltip" title="' . $desc . '">';
    }

    public function buildRequired()
    {
        $element = $this->getElement();
        if (! ($element instanceof Zend_Form_Element_Submit || $element instanceof Zend_Form_Element_Hash)) {
            if ($element->isRequired()) {
                return '<span style="color: red; font-weight: bold;">*</span>';
            }
        }
        return '';
    }

    public function render( $content )
    {
        $view = Jnd_App::getResource("view");
        $view->headLink()->appendStylesheet($view->baseUrl('css/formulaire.css'));
        $element = $this->getElement();
        if (! $element instanceof Zend_Form_Element) {
            return $content;
        }
        $retourChariot = true;
        $attribs = $element->getAttribs();
        if ((isset($attribs["retourChariot"]) and $attribs["retourChariot"] === FALSE) or ($element instanceof Jnd_Form_Element_HiddenDisplay)) {
            $retourChariot = false;
        }
        if (null === $element->getView()) {
            return $content;
        }
        $separator = $this->getSeparator();
        $placement = $this->getPlacement();
        if (! $element instanceof Zend_Form_Element_Hidden) {
            $label = $this->buildLabel();
            $input = $this->buildInput();
            $errors = $this->buildErrors();
            $required = $this->buildRequired();
            $desc = $this->buildDescription();
            $end = $retourChariot ? "<br />" : "";
            if (!$element instanceof Jnd_Form_Element_MultiCheckbox) {
            $output = $input . $desc . $end . $errors . $separator;
            } else {
                $output = "<div id='{$attribs['buttonsetId']}'>" . $input . $desc . $end . $errors . $separator. "</div>";
            }
            switch ($placement)
            {
                case (self::PREPEND):
                    return $output . $separator . $content;
                case (self::APPEND):
                default:
                    return $content . $separator . $output;
            }
        } else {
            return $content . $separator . $this->buildInput();
        }
    }
}
